# python 匿名函数
def add(x, y):
    return x + y


# 匿名函数的关键字 lambda
res = lambda x, y: x + y  # lambda 关键字 + 入参 + : + 要返回的值


# print(res(6, 2))


def func_res(driver):
    return driver.find_element("XPATH", "xxxxxx")


# 练习通过 lambda 表达式实现 func_res
ele = lambda driver: driver.find_element("XPATH", "xxxxxx")

# selenium 中的三种等待方式：1.强制等待；2.隐式等待；3.显式等待；
# 显示等待：WebDriverWait(driver, maxTime).until(method, message="未找到页面元素") -> 每间隔0.5s 去执行method,直到 method
# 返回不为假，就继续执行后续代码，最长等待 maxTime,如果超时 method 还是未满足条件，则抛出 TimeOutException 同时输出message（轮询的作用）
# 利用显示等待，我们可以结合元素定位，对指定的元素进行定位轮询，当元素未找到时，没间隔 0.5s去查找一次，如果元素找到则执行后续操作
# 跟隐式等待的区别，就是隐式等待是全局的，而显式等待是可以针对某一个元素

# 定位器 = ("XPATH", "xxxxxx")
# WebdriveWait(driver, 3).until(EC.visibility_of_element_located(定位器, message="未找到页面元素"))

# 字符串模板  Template
from string import Template
# source_res = "{'action': 'find_and_click', 'locator': ['xpath', '//*[text()='登录']'], 'index': $index, 'text': '$account', 'sleep': '2'}"
# key_datas = {"index": 5, 'account':'15200000001'}
# new_res = Template(source_res).substitute(key_datas)  # source_res 是要被替换的目标字符串，key_datas 用户匹配替换目标字符串中以$开始的字典
# print(new_res)
# 注意：Template(参数1) 参数1需要传入字符串, substitute(参数2)参数 2 需要传入字典
# substitute 中参数 2字典的构造，决定与 参数 1 中$对应的 key,有几个$对应的 key就需要在参数 2中维护对应数据的 key:value

# 练习把 source_res 中的 index 通过 Template  替换成  5

import yaml

list_1 = [1, 2, 3, '4', "$account"]
yaml_list = yaml.dump(list_1)
print(yaml_list)
print(type(yaml_list))
kwargs = {"account": '111111.'}
for k in kwargs.keys():   # kwargs.keys()->["key1","key2"....]
    if isinstance(kwargs[k], str):
        kwargs[k] = f"'{kwargs[k]}'"

new_yaml_list = Template(yaml_list).substitute(kwargs)
print(new_yaml_list)
# 把  new_yaml_list  还原成 python 的 list
list_2 = yaml.safe_load(new_yaml_list)
print(list_2)

# yaml.dump(为了在不丢失原数据类型的前提下转换成 str) -> Template -> yaml.safe_load(对 yaml.dump 转换的数据类型进行还原)

# def run_steps(file_path, operation, **kwargs):
#     print(file_path)
#     print(operation)
#     print(kwargs)
#
# run_steps("路径","方法名", account='15200000001', pwd='111111')